package item;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import java.util.List;

public class ProyectoIntegrador {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// creo proyecto
		
		Itemstrackingsystem its1 = new Itemstrackingsystem();
		itsProjects p1 = its1.createProject("Proyecto 1");		
		itsProjects p2 = its1.createProject("Proyecto 2");
		itsProjects p3 = its1.createProject("Proyecto 3");
		
		//creo equipos
		itsTeams t1 = new itsTeams();
		t1.setNameteam("GOF");
		itsTeams t2 = new itsTeams();
		t2.setNameteam("BugBusters");		
		
		//creo usuarios
		itsUsers u = its1.registerUser("Pepito", "pepito@miempresa.com", "12345");
		t1.addMember( its1.registerUser("Luisito", "luis@miempresa.com", "12345") );
		t1.addMember( its1.registerUser("Martincito", "martin@miempresa.com", "pass") );
		t1.addMember( its1.registerUser("Pedrito", "pedrito@miempresa.com", "pass3") );
		t2.addMember( its1.registerUser("Marianita", "mar@miempresa.com", "12345") );
		t2.addMember( its1.registerUser("Carlitos", "carlotes@miempresa.com", "12345") );
		t2.addMember( its1.registerUser("Licanor Esteban Quito", "leq@miempresa.com", "12345") );
		

		
		//asigno equipos a proyecto sin duplicar
		p1.addTeam(t1);
		p1.addTeam(t2);
		p2.addTeam(t1);
		p3.addTeam(t2);
		
		
		//creo items para los proyectos
		itsItemType itipo1 = new itsItemType("New Feature");
		itsItemType itipo2 = new itsItemType("Bug Correction");
		itsItemType itipo3 = new itsItemType("Testing");
		p1.addItem(new itsItem("feature1",itipo1,"Agregar al sistema una pavadita"));
		p1.addItem(new itsItem("feature2",itipo1,"Borrar del sistema una pavadita"));
		p1.addItem(new itsItem("Testing1",itipo3,"Volver a la primer version"));
		p2.addItem(new itsItem("Testing1",itipo3,"Test modulo 3"));
		
		//estados???
		
		//persisto todo
		EntityManagerFactory emf;
		EntityManager em ;
		EntityTransaction trx;
		
		emf = Persistence.createEntityManagerFactory("NombreUnidadPersistencia");
		em = emf.createEntityManager();
		trx = em.getTransaction();		
		trx.begin();
		
		em.persist(its1);//CASCADE
				
		trx.commit();
		
		
		//deberia ser posible traer todo desde la base:
		Itemstrackingsystem its2 = em.find(Itemstrackingsystem.class, its1.getId());
		itsProjects p10 = its2.getProjects().get(0);
		List<itsTeams> t_p10 = p10.getTeams();
		
		System.out.println("================================");
		System.out.println("Nombre del proyecto: "+p10.getProjectName());
		for (itsTeams itt : t_p10) {
			System.out.println("Team: "+itt.getNameteam());
			for (itsUsers itu : itt.getTeamMembers()) {
				System.out.println("\t Miembro: "+itu.getUsername());
			}
		}
		System.out.println("================================");
		
		em.close();
		emf.close();
	}

}
